Skip to content

feat: add event indexer service for PrivacyLayer contracts#147

Open
HuiNeng6 wants to merge 1 commit intoANAVHEOBA:mainfrom
HuiNeng6:feature/events-indexer
Open

feat: add event indexer service for PrivacyLayer contracts#147
HuiNeng6 wants to merge 1 commit intoANAVHEOBA:mainfrom
HuiNeng6:feature/events-indexer

Conversation

@HuiNeng6
Copy link

Summary

Implements #63 - Contract Events Indexer

This PR adds a comprehensive event indexer service for the PrivacyLayer smart contract, enabling efficient querying and real-time monitoring of all contract events.

Features

Event Indexing

  • Real-time Event Indexing: Automatically polls Soroban RPC for new events
  • All Event Types Supported: Deposit, Withdraw, PoolPaused, PoolUnpaused, VkUpdated
  • Merkle Tree State Tracking: Maintains current Merkle root and leaf count

Storage

  • PostgreSQL Database: Persistent storage with Prisma ORM
  • Indexed Fields: Optimized queries on commitment, nullifierHash, recipient, timestamp, ledger
  • Automatic Migrations: Prisma schema for easy database setup

GraphQL API

  • Queries: Fetch deposits, withdrawals, admin events with filtering and pagination
  • Subscriptions: Real-time updates via WebSocket
  • Utility Queries: Check if commitment/nullifier is used, get indexer stats

Deployment

  • Docker Support: Dockerfile and docker-compose.yml for easy deployment
  • Environment Configuration: Flexible configuration via environment variables

Technical Stack

  • Language: TypeScript
  • API Framework: Apollo Server (GraphQL)
  • Database: PostgreSQL with Prisma ORM
  • Stellar Integration: soroban-client SDK
  • Real-time: graphql-ws for WebSocket subscriptions

Example Usage

Query Recent Deposits:

query {
  deposits(pagination: { skip: 0, take: 10 }) {
    commitment
    leafIndex
    root
    timestamp
  }
}

Subscribe to New Deposits:

subscription {
  onDeposit {
    commitment
    leafIndex
    root
  }
}

Check if Commitment is Used:

query {
  isCommitmentUsed(commitment: "0x...")
}

Setup

  1. Copy .env.example to .env and configure
  2. Run migrations: npx prisma migrate dev
  3. Start the indexer: npm run dev

Files Added

  • indexer/src/index.ts - Main entry point
  • indexer/src/indexer.ts - Event indexing logic
  • indexer/src/parsers.ts - Event parsing utilities
  • indexer/src/resolvers.ts - GraphQL resolvers
  • indexer/src/schema.graphql - GraphQL schema
  • indexer/prisma/schema.prisma - Database schema
  • indexer/package.json, tsconfig.json, Dockerfile, docker-compose.yml, README.md

This implementation provides a solid foundation for off-chain event indexing that can be used by the SDK, frontend, and external integrations.

Implements ANAVHEOBA#63 - Contract Events Indexer

Features:
- Real-time event indexing via Soroban RPC
- PostgreSQL storage with Prisma ORM
- GraphQL API for querying events
- WebSocket subscriptions for real-time updates
- Support for all contract events (Deposit, Withdraw, PoolPaused, PoolUnpaused, VkUpdated)
- Merkle tree state tracking
- Docker deployment support

Technical stack:
- TypeScript/Node.js
- Apollo Server (GraphQL)
- Prisma (PostgreSQL ORM)
- soroban-client (Stellar SDK)
@HuiNeng6
Copy link
Author

@ANAVHEOBA

📢 Follow-up — Ready for Review (24+ Hours)

This Event Indexer Service PR is ready for review.

Implementation Complete:
MERGEABLE - Clean, ready to merge
Event indexing - Contract event monitoring
Database storage - Efficient event storage
API endpoints - Query interface

Looking forward to your review! 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant